#include <func.h>

void print_wstatus(int status) {
    // status: 位图
    if (WIFEXITED(status)) {
        // 正常终止
        printf("exit code: %d\n", WEXITSTATUS(status));
    } else if (WIFSIGNALED(status)) {
        // 异常终止
        printf("signal: %d", WTERMSIG(status));
#ifdef WCOREDUMP 
        if (WCOREDUMP(status)) {
            printf(" (core dump)");
        }
#endif
        printf("\n");
    }
}

int main(int argc, char* argv[])
{
    pid_t pid = fork();
    switch (pid) {
    case -1:
        perror("fork()");
        exit(1);
    case 0:  // 子进程
        printf("child: %d\n", getpid());
        // exit(57);
        // abort();
        for(;;) ;
        break;
    default: // 父进程
        int status;
        pid_t child = wait(&status);
        if (child == -1) {
            perror("wait()");
            exit(1);
        }
        printf("Child %d terminated: ", child);
        print_wstatus(status);  // 打印子进程的终止状态信息
        break;
    }

    return 0;
}

